/*
 * Copyright (c) 2004-2025, University of Oslo
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * 1. Redistributions of source code must retain the above copyright notice, this
 * list of conditions and the following disclaimer.
 *
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 * this list of conditions and the following disclaimer in the documentation
 * and/or other materials provided with the distribution.
 *
 * 3. Neither the name of the copyright holder nor the names of its contributors 
 * may be used to endorse or promote products derived from this software without
 * specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
package org.hisp.dhis.appmanager;

import java.util.HashMap;
import lombok.*;
import org.apache.commons.lang3.StringUtils;

@Getter
@NoArgsConstructor
public class AppManifestTranslation {
  private String locale;

  @Setter private String title;
  @Setter private String description;
  @Setter private HashMap<String, String> shortcuts = new HashMap<>();

  private String countryCode;

  private String languageCode;

  private String scriptCode;

  public void setLocale(String locale) {
    this.locale = locale;
    String[] split = StringUtils.split(locale, "_-");

    if (split.length == 3) {
      this.scriptCode = split[2];
      this.countryCode = split[1];
    }

    if (split.length == 2) {
      this.countryCode = split[1];
    }

    this.languageCode = split[0];
  }

  /**
   * merges two manifest translations giving precedence to the current object used to fill the empty
   * values of a more specific locale (i.e. es_CO) with a less specific one (i.e. es)
   *
   * @param otherTranslation the translation to merge with the current object
   */
  public void merge(AppManifestTranslation otherTranslation) {
    if (otherTranslation == null) {
      return;
    }

    if (StringUtils.isEmpty(this.getTitle()) && !StringUtils.isEmpty(otherTranslation.getTitle())) {
      this.setTitle(otherTranslation.getTitle());
    }
    if (StringUtils.isEmpty(this.getDescription())
        && !StringUtils.isEmpty(otherTranslation.getDescription())) {
      this.setDescription(otherTranslation.getDescription());
    }

    otherTranslation.getShortcuts().forEach(this.shortcuts::putIfAbsent);
  }
}
